package com.ese2013.mensaunibe.mensa.test; import android.app.Instrumentation.ActivityMonitor; import android.support.v4.app.ListFragment; import android.test.ActivityInstrumentationTestCase2; import android.test.TouchUtils; import android.test.ViewAsserts; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; import android.view.KeyEvent; import android.widget.ListAdapter; import android.widget.TextView; import android.widget.ToggleButton; import com.ese2013.mensaunibe.R; import com.ese2013.mensaunibe.mensa.MensaActivity; import com.ese2013.mensaunibe.mensa.MensaListAdapter; import com.ese2013.mensaunibe.mensa.MensaListFragment; import com.ese2013.mensaunibe.menu.MenuActivity; import com.ese2013.mensaunibe.model.utils.AppUtils; /** * @author group7 * @author Sandor Torok */ public class MensaActivityTest extends ActivityInstrumentationTestCase2<MensaActivity> { private MensaActivity activity; private ListFragment mFragment; private ListAdapter mAdapter; private ToggleButton mFavButton; private static final int AVAILABLE_MENSAS = 8; public MensaActivityTest() { super(MensaActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); setActivityInitialTouchMode(false); activity = getActivity(); mFragment = (MensaListFragment) getActivity().getSupportFragmentManager() .findFragmentByTag(AppUtils.TAG_MENSALIST_FRAGMENT); mAdapter = mFragment.getListAdapter(); mFavButton = (ToggleButton) getActivity() .findViewById(R.id.tgl_favorite); } /** * Testing preconditions for test cases */ public void testPreConditions() { assertNotNull(activity); assertNotNull(mFragment); assertNotNull(mAdapter); assertTrue(mAdapter instanceof MensaListAdapter); } /** * Test if correct number of list elements are in the List View */ @SmallTest public void testListCount() { int adapterCount = AVAILABLE_MENSAS; for (int i = 0; i < mAdapter.getCount(); i++) { // if it is a section, then will be null, so we should add it to // number of canteens if (mAdapter.getItem(i) == null) adapterCount++; } assertEquals("List count does not match", mAdapter.getCount(), adapterCount); } /** * Test favorite Button state. * Emulator should be started with wiped user data for this test case to * work properly. */ @SmallTest public void testFavoriteToggleButton() { assertNotNull("Favorite button not allowed to be null", mFavButton); assertTrue("Favorite toggle button should not be checked", !mFavButton.isChecked()); } @MediumTest public void testMenuActivityStarted(){ // add monitor to check for the second activity ActivityMonitor monitor = getInstrumentation(). addMonitor(MenuActivity.class.getName(), null, false); TextView listItem = (TextView) activity .findViewById(R.id.mensa_list_row); // TouchUtils handles the sync with the main thread internally TouchUtils.clickView(this, listItem); // wait 2 seconds for the start of the activity MenuActivity startedActivity = (MenuActivity) monitor .waitForActivityWithTimeout(2000); assertNotNull(startedActivity); // search for the textView TextView textView = (TextView) startedActivity.findViewById(R.id.menu_text); // check that the TextView is on the screen ViewAsserts.assertOnScreen(startedActivity.getWindow().getDecorView(), textView); // press back this.sendKeys(KeyEvent.KEYCODE_BACK); } /** * Test if application state is preserved between launches */ @MediumTest public void testFavMensaPersistedBetweenLaunches() { mFavButton = (ToggleButton) getActivity() .findViewById(R.id.tgl_favorite); assertEquals(mFavButton.isChecked(), false); activity.runOnUiThread(new Runnable() { @Override public void run() { mFavButton.setChecked(true); } }); // close the activity activity.finish(); setActivity(null);//force creation of a new Activity // relaunch the activity activity = this.getActivity(); mFavButton = (ToggleButton) getActivity() .findViewById(R.id.tgl_favorite); assertEquals(mFavButton.isChecked(), true); activity.runOnUiThread(new Runnable() { @Override public void run() { mFavButton.setChecked(false); } }); activity.finish(); setActivity(null); activity = this.getActivity(); mFavButton = (ToggleButton) getActivity() .findViewById(R.id.tgl_favorite); assertEquals(mFavButton.isChecked(), false); } }